package date;

import org.junit.Test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class Before8DateTest {
    /**
     * JDK8之前的 API
     * <p>
     * Date类的使用
     * |---java.util.Date
     * > 两个构造器的使用
     * > 两个方法的使用
     * ① toString() ② getTime()
     * |---java.sql.Date
     * <p>
     * SimpleDateFormat类:用于日期时间的格式化和解析
     * 格式化:日期--->字符串
     * 解析:字符串--->日期
     * <p>
     * Calendar类:日历类
     * ① 实例化:由于Calendar是一个抽象类,所以需要创建其子类的实例.
     * 这里可以通过Calendar的静态方法getInstance()即可获取.
     */
    @Test
    public void test1() {
        // 获取当前时间对应的毫秒数， long 类型，时间戳
        // 当前时间与1970.1.1 0时0分0秒之间的毫秒数
        long l = System.currentTimeMillis();
        System.out.println(l);

        Date date1 = new Date(); // 创建一个基于当前系统时间的Date的实例
        System.out.println(date1);// Wed Mar 05 10:46:00 CST 2025
        long time = date1.getTime();
        System.out.println(time); // 1741142896015

        Date date2 = new Date(1741142896015L); // 创建一个基于指定时间戳的Date的实例
        System.out.println(date2);


        java.sql.Date date = new java.sql.Date(1741142896015L);
        System.out.println(date); // 2025-03-05

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
        // 格式化
        String formatted = simpleDateFormat.format(date);
        System.out.println(formatted); // 2025/3/5 上午10:48

        // 解析
        Date date3 = null;
        try {
            date3 = simpleDateFormat.parse("2025/3/5 上午11:03");
        } catch (ParseException e) {
            e.printStackTrace();  // java.text.ParseException
        }
        System.out.println(date3);

        SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss: Z");
        System.out.println(sdf.format(date3)); // 周三, 5 3月 2025 11:03:00: +0800


    }


    @Test
    public void testExr() {
        // Date实例转化为sql Date实例
        java.sql.Date sql = new java.sql.Date(new Date().getTime());
        System.out.println(sql);
    }

    @Test
    public void testCalendar() {
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);
        System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

        calendar.set(Calendar.DAY_OF_MONTH, 2);
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
        calendar.add(Calendar.DAY_OF_MONTH, 3);
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

        System.out.println(calendar.get(Calendar.MONTH)); // 月份是从0开始的:偏移性
    }

    /**
     * 从控制台获取年月日的字符串数据,保存在数据库中.
     * 得到java.sql.Date的对象
     */
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Scanner scan = new Scanner(System.in);
        String input = scan.next();
        java.sql.Date parsed = new java.sql.Date(simpleDateFormat.parse(input).getTime());

        System.out.println(parsed);
        System.out.println(parsed.getTime());
    }

}
